#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#define fi first
#define se second
#define DB double
#define U unsigned
#define P std::pair
#define LL long long
#define LD long double
#define pb emplace_back
#define MP std::make_pair
#define SZ(x) ((int)x.size())
#define all(x) x.begin(),x.end()
#define CLR(i,a) memset(i,a,sizeof(i))
#define FOR(i,a,b) for(int i = a;i <= b;++i)
#define ROF(i,a,b) for(int i = a;i >= b;--i)
#define DEBUG(x) std::cerr << #x << '=' << x << std::endl
const int MAXN = 1000+5;
int p[MAXN],q[MAXN],n,a[MAXN];
int main(){
std::cin >> n;
std::vector<std::pair<int,int>> S;
for (int i = 1; i <= n; ++i) {
scanf("%d",a+i);
S.pb(a[i],i);
}
std::sort(all(S));
FOR(i,1,n) {
q[i] = S[i-1].se;
p[q[i]] = i;
}
std::vector<P<int,int> > res;
auto swap = [&](int x,int y){
std::swap(q[p[x]],q[p[y]]);
std::swap(p[x],p[y]);
if(a[x] < a[y]) {
std::swap(x,y);
}
res.pb(x,y);
};
ROF(i,n,1){
int t = p[i];
FOR(j,t+1,i) {
swap(i,q[j]);
}
}
printf("%d\n",SZ(res));
for(auto x:res) {
printf("%d %d\n",x.fi,x.se);
}
return 0;
}
1271A - Suits | 259B - Little Elephant and Magic Square |
1389A - LCM Problem | 778A - String Game |
1382A - Common Subsequence | 1512D - Corrupted Array |
667B - Coat of Anticubism | 284B - Cows and Poker Game |
1666D - Deletive Editing | 1433D - Districts Connection |
2B - The least round way | 1324A - Yet Another Tetris Problem |
246B - Increase and Decrease | 22E - Scheme |
1566A - Median Maximization | 1278A - Shuffle Hashing |
1666F - Fancy Stack | 1354A - Alarm Clock |
1543B - Customising the Track | 1337A - Ichihime and Triangle |
1366A - Shovels and Swords | 919A - Supermarket |
630C - Lucky Numbers | 1208B - Uniqueness |
1384A - Common Prefixes | 371A - K-Periodic Array |
1542A - Odd Set | 1567B - MEXor Mixup |
669A - Little Artem and Presents | 691B - s-palindrome |